<?php

/**
 * Created by Sven.
 * Date: 2016/12/25
 * Time: 12:31
 * Manage 控制器
 */
class ManageAction extends Action {

    public function __construct( $_tpl ) {
        parent::__construct( $_tpl, new ManageModel( $_tpl ) );
        // 3 在进行一系列action之后，显示界面
//        $this->tpl->display( 'main_home_manage.tpl' );
    }

    public function action() {
        if (!isset($_GET['action'])){
            $_GET['action'] = 'show';
        }

        $_action =  $_GET[ 'action' ];

        // 使用?action=show 区分同一个页面的四个模块
        switch ( $_action ) {
            case 'add':
                $this->add();
                break;
            case 'delete':
                $this->delete();
                break;
            case 'update':
                $this->update();
                break;
            case 'show':
                $this->show();
                break;
            default:
                exit( 'ERROR：action参数非法' );
                break;
        }
    }

    // 新增管理员
    private function add() {
        // 在显示页面元素前，处理一下接收的参数
        if (  IS_POST ) {
            if (Validate::checkNull($_POST[ 'admin_user' ])) Tool::alertBack('警告：用户名不能为空'.$_POST['admin_user']);
            if (Validate::checkNull($_POST[ 'admin_password' ])) Tool::alertBack('警告：密码不能为空');
            if (Validate::checkMinLengh($_POST[ 'admin_user' ], 2)) Tool::alertBack('警告：用户名不能小于2位');
            if (Validate::checkMaxLengh($_POST[ 'admin_user' ], 20)) Tool::alertBack('警告：用户名不能大于20位');
            if (Validate::checkMinLengh($_POST[ 'admin_password' ], 6)) Tool::alertBack('警告：密码不能小于6位');
            if (Validate::checkEquals($_POST[ 'admin_password' ], $_POST[ 'confirm_password' ])) Tool::alertBack('警告：密码与确认密码不相等');

            $this->model->admin_user = $_POST[ 'admin_user' ];
            $this->model->admin_password = sha1( $_POST[ 'admin_password' ] );
            $this->model->admin_level = $_POST[ 'level' ];

            $_mange_count = $this->model->getManageCountByAdminUser();
            if ($_mange_count > 0){
                Tool::alertBack( '警告：已存在相同的用户名' );

            } else {
                $_result = $this->model->addManage();
                // 判断是否执行成功
                if ( $_result ) {
                    // 成功
                    // 返回之前的页面
                    $back_url = isset($_POST['prev_url']) ? $_POST['prev_url'] : PREV_URL;
                    Tool::alertLocation( '修改管理员成功', $back_url );
                } else {
                    // 失败
                    Tool::alertBack( '新增管理员失败' );
                }

            }

        }
        // 如果是显示界面，则必须显示等级数据
        $_level = new LevelModel();
        $this->tpl->assign( 'levels', $_level->getAllLevels() );

        $this->tpl->assign( 'add', '11' );
        $this->tpl->assign( 'title', '新增管理员' );
    }

    // 删除管理员
    private function delete() {
        if ( isset( $_GET[ 'id' ] ) ) {
            $_id = intval($_GET[ 'id' ]);
            if ($_id > 0){
                $this->model->id = $_id;
                $_result = $this->model->deleteManage(); // true or false
                if ( $_result ) {
                    // 返回之前的页面
                    $back_url = isset($_POST['prev_url']) ? $_POST['prev_url'] : PREV_URL;
                    Tool::alertLocation( '修改管理员成功', $back_url );
                } else {
                    Tool::alertBack( '警告：删除管理员失败' );
                }
            } else {
                Tool::alertBack('警告：非法的ID值');
            }

        } else {
            Tool::alertBack( '警告：非法操作：ID错误' );
        }
//                $this->tpl ->assign( 'delete', true );
//                $this->tpl ->assign( 'title', '删除管理员' );
    }

    // 修改管理员
    private function update() {

        // 在显示界面之前，判断是否提交了数据
        if (  IS_POST ) {

            $_POST['id'] = intval($_POST['id']);
            if ( isset( $_POST[ 'id' ] ) && $_POST['id'] > 0  ) {
                // 判断这个id是否对应真实的数据记录
                $_count = $this->model->getCount('cms_manage', 'id', $_POST['id']);
                if ($_count <= 0){
                    Tool::alertBack('警告：非法的ID值');
                    return;
                }


                if (Validate::checkNull($_POST[ 'admin_user' ])) Tool::alertBack('警告：用户名不能为空'.$_POST['admin_user']);
                if (Validate::checkMinLengh($_POST[ 'admin_user' ], 2)) Tool::alertBack('警告：用户名不能小于2位');
                if (Validate::checkMaxLengh($_POST[ 'admin_user' ], 20)) Tool::alertBack('警告：用户名不能大于20位');

                if (!Validate::checkNull($_POST['admin_password'])){
                    if (Validate::checkMinLengh($_POST[ 'admin_password' ], 6)) Tool::alertBack('警告：密码不能小于6位');
                    if (Validate::checkEquals($_POST[ 'admin_password' ], $_POST[ 'confirm_password' ])) Tool::alertBack('警告：密码与确认密码不相等');
                }

                $this->model->id = $_POST[ 'id' ];

                if (Validate::checkNull($_POST['admin_password'])){
                    $this->model->admin_password =  $_POST[ 'prev_pass' ];
                } else {
                    $this->model->admin_password = sha1( $_POST[ 'admin_password' ] );
                }

                $this->model->admin_level = $_POST[ 'level' ];

                $_result = $this->model->updateManage();
                // 判断是否执行成功
                if ( $_result ) {
                    // 成功
                    // 返回之前的页面
                    $back_url = isset($_POST['prev_url']) ? $_POST['prev_url'] : PREV_URL;
                    Tool::alertLocation( '修改管理员成功', $back_url );
                } else {
                    // 失败
                    Tool::alertBack( '警告：修改管理员失败' );
                    exit;
                }
            } else {
                Tool::alertBack( '警告：非法操作：ID错误' );
            }

        }

        if ( $_GET[ 'id' ] ) {
            $this->model->id = $_GET[ 'id' ];
            $_row = $this->model->getSingleManageById();
            if ( isset( $_row ) && is_object( $_row ) ) {
                $this->tpl->assign( 'data', $_row );

                $level_id = $_row->level;
                $this->tpl->assign( 'level_id', $level_id );

            } else {
                Tool::alertBack( '警告：非法操作：ID错误' );
            }

        } else {
            Tool::alertBack( '警告：非法操作：ID错误' );
        }
        // 如果是显示界面，则必须显示等级数据
        $_level = new LevelModel();
        $this->tpl->assign( 'levels', $_level->getAllLevels() );

        $this->tpl->assign( 'update', true );
        $this->tpl->assign( 'title', '修改管理员' );
    }

    // 显示管理员
    private function show() {
        // 模块标记
        $this->tpl->assign( 'show', true );

        // 分页
        $_total =  $this->model->getTotalCount();
        parent::page($_total, PAGE_SIZE);

        // 数据
        $_data = $this->model->getManage();
        $this->tpl->assign( 'data', $_data );
        $this->tpl->assign( 'title', '管理员列表' );

    }



}
